"""

用户帐户相关功能 ： 注册、短信、登录、注销
"""
import uuid
import datetime
from django.shortcuts import render,redirect,HttpResponse
from django.http import JsonResponse
from django.db.models import Q

from web.forms.account import RegisterModelForm,SendSmsForm,LoginSMSForm,LoginForm
from web import models


def register(request):
    form = RegisterModelForm()
    if request.method =='POST':
        form = RegisterModelForm(data=request.POST)
        if form.is_valid():
            #  验证通过， 写入数据库 （密码是密文）
            instance = form.save()
            policy_object = models.PricePolicy.objects.filter(category=1,title='个人免费版').first()
            #创建交易记录
            models.Transaction.objects.create(
                status=2,
                order=str(uuid.uuid4()),
                user=instance,
                price_policy=policy_object,
                count=0,
                price=0,
                start_datatime=datetime.datetime.now(),




            )
            return JsonResponse({'status': True, 'data': '/login/'})
        return JsonResponse({'status': False, 'error': form.errors})

    return render(request, 'register.html',{'form':form})

def send_sms(request):
    """ 发送短信  """

    form = SendSmsForm(request,data=request.GET)
    if form.is_valid():
        return JsonResponse({'status':True})

    return JsonResponse({'status':False,'error':form.errors})

def login_sms(request):
    """登录"""
    form = LoginSMSForm()
    if request.method =='POST':
        form = LoginSMSForm(data=request.POST)
        if form.is_valid():
            #用户输入正确 登录成功
            user_object = form.cleaned_data['mobile_phone']
            #将用户信息放入session
            request.session['user_id'] = user_object.id
            request.session.set_expiry(60 * 60 * 24 * 14)
            return JsonResponse({'status': True, 'data': '/index/'})
        return JsonResponse({'status': False, 'error': form.errors})
    return render(request,'login_sms.html',{'form':form})




def login(request):
    """用户名和密码登录"""
    form = LoginForm(request)
    if request.method =='POST':
        form = LoginForm(request, data= request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            # user_object = models.UserInfo.objects.filter(username=username,password=password).first()
            user_object = models.UserInfo.objects.filter(Q(email=username)|Q(mobile_phone=username)).filter(
                password=password).first()


            if user_object:
                request.session['user_id'] = user_object.id
                request.session.set_expiry(60*60*24*14)
                return redirect('index')
            form.add_error('username','用户名密码错误')
        return render(request,'login.html',{'form':form})

    return render(request,'login.html',{'form':form})


def img_code(request):
    """shengcheng tu pian yan zheng ma"""
    from io import BytesIO
    from Utils.image_code import check_code
    image_object, code = check_code()
    request.session['image_code'] = code
    request.session.set_expiry(60)   #主动修改session的过期时间
    stream = BytesIO()
    image_object.save(stream, 'png')
    return HttpResponse(stream.getvalue())


def logout(request):
    request.session.flush()
    return redirect('index')